﻿#ifndef __USER_PAGE_CONFIG_H__
#define __USER_PAGE_CONFIG_H__

#if defined(LV_LVGL_H_INCLUDE_SIMPLE)
#include "lvgl.h"
#else
#include "lvgl/lvgl.h"
#endif

#include "picture/picture_define.h"


//弹窗默认选择的按钮 左边 0   右边 1
#define DEFAULT_CHOICE_BTN_LEFT   0
#define DEFAULT_CHOICE_BTN_RIGHT  1

typedef enum 
{
	PAIRED_MENU=0,
	RESET_MENU,
	SHUTDOWN_MENU,
	MAIN_MENU,
	LANGUAGE_MENU,
	SETTING_MENU,
	WINDOW_MENU,
	
}MENU;

enum Language_type_t
{
	CHINESE = 0,
	ENGLISH,
};
typedef enum
{
    BTN_CMD      = 0x01,
    PAGE_CMD     = 0x02,
    WINDOW_CMD   = 0x03,


}CMD_t;



//按键功能定义  根据协议文档定义
#define KEY_NONE_CODE       0x00
#define KEY_ENTER_CODE      0x01
#define KEY_UP_CODE     	0x02    
#define KEY_DOWN_CODE       0x03 


//界面切换定义  根据协议文档定义
typedef enum
{

	DISPLAY_OFF  = 0x00,
	DISPLAY_HOME = 0x01,
	DISPLAY_MENU_CHINESE = 0x02,	
	DISPLAY_PAIR_CHINESE = 0x03,
	DISPLAY_MENU_ENGLISH = 0x04,	
	DISPLAY_PAIR_ENGLISH = 0x05,
	DISPLAY_OTA          = 0xFE,

    DISPLAY_ALL,
}DISPLAY_t;

//弹窗界面切换定义  根据协议文档定义
typedef enum
{

	DISPLAY_WINDOW_OFF  = 0x00,  		//关闭弹窗
	DISPLAY_WINDOW_LOW_BATTERY = 0x01,	//低电量弹窗
	
	//以下仅在配对界面显示
	DISPLAY_WINDOW_PAIRED_FAIL = 0x20,	//配对失败
	DISPLAY_WINDOW_ADD_DEV1    = 0x21, //添加设备 01
	DISPLAY_WINDOW_ADD_DEV2    = 0x22, //添加设备 02	
	DISPLAY_WINDOW_ADD_DEV3    = 0x23, //添加设备 03
	DISPLAY_WINDOW_ADD_DEV4    = 0x24, //添加设备 04
	DISPLAY_WINDOW_PAIRED_SUCCESS = 0x25, //配对成功

	DISPLAY_WINDOW_RESET_DEFAULT_NO   = 0x30, //重置
	DISPLAY_WINDOW_RESET_DEFAULT_YES  = 0x31, //重置
}WINDOW_Type_t;


//字体引用
LV_FONT_DECLARE(font18);

typedef struct
{
	
	uint8_t batt_value;        //显示电量数据 两位
	bool batt_value_is_display;           //是否显示
	uint8_t batt_grade_value;  //显示图标值
	bool batt_grade_value_is_display;     //是否显示
}display_batt_t;


typedef struct
{
	bool is_display;           //是否显示
	uint8_t sign_grade_value;  //显示图标值
}display_sign_t;

typedef struct
{
	//bool is_display;           //是否显示
	uint8_t fast_value;        //显示速度数据 两位数字
	uint8_t fast_grade_value;  //显示速度等级图标
}display_fast_t;



typedef union {


    struct
    {
        unsigned int int_value :9;  //整数部分
        unsigned int dir_value :3 ;   //方向显示部分
        unsigned int reved :      4;  //保留位

    }compass_data;
    uint16_t compass_all;

}Compass_t;  //指南针


typedef union {

   
     struct
    {
        unsigned char int_value   :8;  //整数部分
        unsigned char point_value :4;  //小数部分
        unsigned char temp_type  : 1;  //温度单位 0 ℃ (摄氏度) 1 ℉（华氏度） 1℉=32+℃*1.8
        unsigned char int_type   : 1;  //0 负值 1 正值
        unsigned char reved      : 2;  //保留位

    }temp_data;
    uint16_t temp_all;

}Temp_t;//温度


typedef union {


     struct
    {
        unsigned char int_value : 8;  //整数部分
        unsigned char point_value : 4;  //小数部分
        unsigned char temp_type : 1;  //深度单位 0 m (米) 1 ft (英寸) 1ft=0.3048m
        unsigned char int_type : 1;  //0 负值 1 正值
        unsigned char reved : 2;  //保留位

    }deep_data;
    uint16_t deep_all;

}Deep_t;//深度

typedef struct 
{
	uint8_t current_page;
	uint8_t last_page;
	uint8_t language_type; //语言设置
	uint64_t time;  	   //开机运行时间
	
	
	display_batt_t dev_batt[4]; //设备电池信息
	display_sign_t dev_sign[4]; //设备信号信息


	display_batt_t local_batt[1]; //本地设备电池信息
	display_fast_t local_fast[1]; //本地设备速度信息
	uint16_t Paired_Countdown;   //配对倒计时更新

    Compass_t compass; //方位显示
    Deep_t deep;//深度显示数值
    Temp_t temp;//温度显示数值


    lv_obj_t* window_obj;     //弹窗信息
    lv_group_t* window_group;  //弹窗信息
    bool window_is_runing;     //弹窗是否正在显示
    uint8_t  window_type;      //当前弹窗类型

}page_config_t;



extern page_config_t page_config;

extern lv_obj_t* prj_parent_cont;
extern lv_obj_t* prj_prev_cont;
extern lv_group_t* g_group;

void user_main_page_entry(lv_obj_t* obj);
void user_main_page_exit(lv_obj_t* obj);


void user_setting_page_entry(lv_obj_t* obj);
void user_setting_page_exit(lv_obj_t* obj);

void user_window_page_entry(lv_obj_t* obj, WINDOW_Type_t type);
void user_window_page_exit(lv_obj_t* obj);


void user_paired_page_entry(lv_obj_t* obj);
void user_paired_page_exit(lv_obj_t* obj);





void Menu_Send_Event(uint8_t event, uint8_t code);


void Window_Display_Callback(WINDOW_Type_t type, lv_obj_t* parent);

#endif
